From: Giovanni Campagna Date: Sun, 17 Feb 2013 14:52:53 +0000 (+0100) Subject: Calendar: don't initialize the event source synchronously X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~4812 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=0aa26e91341b667ce23fadce033a4ac4ef0053bc;p=gnome-shell.git Calendar: don't initialize the event source synchronously We don't want to block the shell start to load evolution-data-server and open all calendars (which can involve network connections) https://bugzilla.gnome.org/show_bug.cgi?id=694030 --- diff --git a/js/ui/calendar.js b/js/ui/calendar.js index 313171dce..5effe2678 100644 --- a/js/ui/calendar.js +++ b/js/ui/calendar.js @@ -2,6 +2,7 @@ const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; +const GLib = imports.gi.GLib; const Lang = imports.lang; const St = imports.gi.St; const Signals = imports.signals; @@ -196,15 +197,12 @@ const CalendarServerIface = const CalendarServerInfo = Gio.DBusInterfaceInfo.new_for_xml(CalendarServerIface); function CalendarServer() { - var self = new Gio.DBusProxy({ g_connection: Gio.DBus.session, - g_interface_name: CalendarServerInfo.name, - g_interface_info: CalendarServerInfo, - g_name: 'org.gnome.Shell.CalendarServer', - g_object_path: '/org/gnome/Shell/CalendarServer', - g_flags: Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES }); - - self.init(null); - return self; + return new Gio.DBusProxy({ g_connection: Gio.DBus.session, + g_interface_name: CalendarServerInfo.name, + g_interface_info: CalendarServerInfo, + g_name: 'org.gnome.Shell.CalendarServer', + g_object_path: '/org/gnome/Shell/CalendarServer', + g_flags: Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES }); } function _datesEqual(a, b) { @@ -232,14 +230,27 @@ const DBusEventSource = new Lang.Class({ _init: function() { this._resetCache(); + this._initialized = false; this._dbusProxy = new CalendarServer(); - this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged)); + this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) { + try { + this._dbusProxy.init_finish(result); + } catch(e) { + log('Error loading calendars: ' + e.message); + return; + } - this._dbusProxy.connect('notify::g-name-owner', Lang.bind(this, function() { - if (this._dbusProxy.g_name_owner) - this._onNameAppeared(); - else - this._onNameVanished(); + this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged)); + + this._dbusProxy.connect('notify::g-name-owner', Lang.bind(this, function() { + if (this._dbusProxy.g_name_owner) + this._onNameAppeared(); + else + this._onNameVanished(); + })); + + this._initialized = true; + this._onNameAppeared(); })); }, @@ -286,6 +297,10 @@ const DBusEventSource = new Lang.Class({ }, _loadEvents: function(forceReload) { + // Ignore while loading + if (!this._initialized) + return; + if (this._curRequestBegin && this._curRequestEnd){ let callFlags = Gio.DBusCallFlags.NO_AUTO_START; if (forceReload)